/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package Presenter;

import Serializacao.serializacaoArquivo;
import View.TelaPrincipalView;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;

/**
 *
 * @author Bush
 */
public class TelaPrincipalPresenter {

    private TelaPrincipalView view;
    private static TelaPrincipalView staticView;

    public TelaPrincipalPresenter(String Apelido) {
        view = new TelaPrincipalView();
        staticView = view;
        view.getTxtApelido().setText("Logado com: " + Apelido);      
        DefaultMutableTreeNode master = new DefaultMutableTreeNode("arquivos");
        DefaultTreeModel model = new DefaultTreeModel(master);
        listAllFiles("arquivos", master, true); //Endereço do diretorio de arquivos
        
        view.getBtnSair().addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                view.dispose();
            }
        });
        
        view.getBtnAbrir().addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                try {
                    abrirDocumento();
                } catch (Exception ex) {
                    JOptionPane.showMessageDialog(null, ex.getMessage());
                }
            }
        });
        usuariosOnline("192.168.12.53");
        view.getArvore().setModel(model);
        view.setLocationRelativeTo(view);
        view.setVisible(true);

    }

    public void abrirDocumento() throws Exception {
        serializacaoArquivo serializacao = new serializacaoArquivo();
        if (view.getArvore().isSelectionEmpty()) {
            throw new Exception("Selecione um Documento primeiro!");
        }
        TreePath[] paths = view.getArvore().getSelectionPaths();
        String end = paths[0].toString().replace("[", "").replace("]", "").replace(",","/").replace(" ", "");
        
        File caminho = new File(end); //Falta selecionar o Caminho
        view.getAreaDocumento().setText(serializacao.lerDocumento(caminho));
    }

    
    public static void listAllFiles(String directory, DefaultMutableTreeNode parent, Boolean recursive) {
        // Lista todos os arquivos no diretório "String directory" no array "children"  
        File[] children = new File(directory).listFiles();

        for (int i = 0; i < children.length; i++) {

            // Pega o nome de cada Pasta ou Arquivo  
            DefaultMutableTreeNode node = new DefaultMutableTreeNode(children[i].getName());
            // Só mostra o Node se ele é uma pasta e se esta é uma chamada recursiva  
            if (children[i].isDirectory() && recursive) {
                parent.add(node); // adiciona como filho  
                listAllFiles(children[i].getPath(), node, recursive); // chamada recursiva para trabalhar com o filho  
            } else if (!children[i].isDirectory()) { // senão caso não seja um diretório  
                parent.add(node); // adiciona como um arquivo  
            }
        }
    }


    public static void usuariosOnline(String usuario) {
        usuario += ":";
        DefaultTableModel tm = new DefaultTableModel(
                new Object[][]{},
                new String[]{"Usuarios Online"}) {

                    @Override
                    public boolean isCellEditable(int row, int col) {
                        return false;
                    }
                };
        tm.setNumRows(0);
        String linha[] = usuario.split(":");
        tm.addRow(linha);
        staticView.getTabelaUsuarios().setModel(tm);
    }
}
